Fix cairo clipping to client side windows
authorAlexander Larsson <alexl@redhat.com>
Tue, 25 Aug 2009 13:43:52 +0000 (15:43 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 25 Aug 2009 13:47:09 +0000 (15:47 +0200)
When updating the clip region on cairo context (due to window changes or
paints of different sizes) we reset the old clip region, but this was
erronously done inside a cairo_save/cairo_restore pair, which made the
reset not take effect.

This fixes bug #592263.

gdk/gdkwindow.c

index 7ca6c3c9d06b877a21cb9ecc421d37b84b4a2a5b..195ba3e35829fd02bbce348068d2a75973a13b36 100644 (file)
@@ -4602,11 +4602,11 @@ gdk_window_set_cairo_clip (GdkDrawable *drawable,
 
   if (!private->paint_stack)
     {
+      cairo_reset_clip (cr);
+
       cairo_save (cr);
       cairo_identity_matrix (cr);
 
-      cairo_reset_clip (cr);
-
       cairo_new_path (cr);
       gdk_cairo_region (cr, private->clip_region_with_children);
 
@@ -4619,13 +4619,12 @@ gdk_window_set_cairo_clip (GdkDrawable *drawable,
 
       /* Only needs to clip to region if piggybacking
         on an implicit paint pixmap */
+      cairo_reset_clip (cr);
       if (paint->uses_implicit)
        {
          cairo_save (cr);
          cairo_identity_matrix (cr);
 
-         cairo_reset_clip (cr);
-
          cairo_new_path (cr);
          gdk_cairo_region (cr, paint->region);
          cairo_restore (cr);